package model;

import java.util.ArrayList;

//ko akadaly az akadalybol szarmaztatva
public class Rock extends Obstacle {

	boolean isAlive;


	// konstruktor
	public Rock(int x, int y, String type, float ran) {
		super(x, y, type, ran);
		range = 10;
		isAlive = true;


	}

	// alapkonstruktor
	public Rock() {
		super();
		range = 10;
		isAlive = true;

	}

	public Rock(int id, int x, int y) {
		super("Rock", id, x, y);
		range = 10;
		isAlive = true;

	}
	//Hangyászsünnel való ütközés detektálása
	public boolean collision(HedgeHog h) {

		if (this.loc_x + range > h.loc_x - h.range
				&& this.loc_x - range < h.loc_x + h.range
				&& this.loc_y + range > h.loc_y - h.range
				&& this.loc_y - range < h.loc_y + h.range) {

			return true;
		}

		else {

			return false;
		}

	}
	//Másik kaviccsal való ütközés detektálása
	public boolean collision(Rock r) {
		if (this.loc_x + range > r.loc_x - r.range
				&& this.loc_x - range < r.loc_x + r.range
				&& this.loc_y + range > r.loc_y - r.range
				&& this.loc_y - range < r.loc_y + r.range) {

			return true;
		}

		else {

			return false;
		}

	}
	//Mozgást vezérlő függvény
	public boolean move(HedgeHog h, ArrayList<Lake> lak, ArrayList<Rock> rok) {

		// Tóval való ütközés detektálása
		for (Lake l : lak) {
			if (l.collision(this)) {
				h.game.currentMap.sinkRock(this);
				isAlive = false;
				return true;
			}
		}
		// Kaviccsal való ütközés detektálása
		
		for (Rock r : rok) {
			if (r.collision(this) && !(r.equals(this))) {
				if (!r.move(this, lak, rok, h)) {
					return false;

				}
			}
		}
		
			loc_x += (h.dir_x * h.speed);
			loc_y += (h.dir_y * h.speed);
		

		return true;
	}

	public boolean move(Rock r, ArrayList<Lake> lak, ArrayList<Rock> rok,
			HedgeHog h) {
		// Kaviccsal való ütközés detektálása
		for (Rock r1 : rok) {
			
				if (r1.collision(this) && !r1.equals(this) && !r1.equals(r) && !this.equals(r)) {
						return false;
					}
				} 

			
		

		// Tóval való ütközés detektálása
		for (Lake l : lak) {
			if (l.collision(r)) {
				h.game.currentMap.sinkRock(this);
				isAlive = false;
				return true;
			}
		}
			loc_x += (h.dir_x * h.speed);
			loc_y += (h.dir_y * h.speed);
		
		return true;

	}

	public boolean getisAlive() {
		return isAlive;
	}
}
